package com.ruoyi.cloudsyncuser.utils;

import com.ruoyi.cloudsyncuser.model.User;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class JwtUtils {

    private static final String signKey = "ryCloudSync";
    private static final Long expire = 432000000L;

    /**
     * 生成包含用户完整信息的 JWT 令牌
     * @param user 用户对象
     * @return JWT 字符串
     */
    public static String generateJwtFromUser(User user) {
        Map<String, Object> claims = new HashMap<>();

        // 将 User 的各字段加入到 claims 中
        claims.put("userId", user.getUserId());
        claims.put("username", user.getUsername());
        claims.put("phoneNumber", user.getPhoneNumber());
        claims.put("email", user.getEmail());
        claims.put("loginIp", user.getLoginIp());
        claims.put("loginTime", user.getLoginTime());
        claims.put("registerTime", user.getRegisterTime());
        claims.put("status", user.getStatus());

        return Jwts.builder()
                .addClaims(claims)
                .signWith(SignatureAlgorithm.HS256, signKey)
                .setExpiration(new Date(System.currentTimeMillis() + expire))
                .compact();
    }


    /**
     * 解析 JWT 令牌
     * @param jwt JWT令牌
     * @return JWT 第二部分负载 payload 中存储的内容
     */
    public static Claims parseJWT(String jwt) {
        return Jwts.parser()
                .setSigningKey(signKey)
                .parseClaimsJws(jwt)
                .getBody();
    }
}
